package com.tianyuan.lims.common.config;

import com.google.code.kaptcha.impl.DefaultKaptcha;
import com.google.code.kaptcha.util.Config;
import java.util.Properties;

public class CaptchaConfig {

    // 普通字符验证码实例
    private static DefaultKaptcha captchaProducer;
    // 数学计算验证码实例（类似 Spring 中的 captchaProducerMath）
    private static DefaultKaptcha captchaProducerMath;

    static {
        // 初始化普通验证码
        captchaProducer = initKaptcha(false);
        // 初始化数学验证码
        captchaProducerMath = initKaptcha(true);
    }

    /**
     * 初始化 Kaptcha 配置
     * @param isMath 是否为数学验证码
     */
    private static DefaultKaptcha initKaptcha(boolean isMath) {
        DefaultKaptcha kaptcha = new DefaultKaptcha();
        Properties properties = new Properties();

        // 公共配置
        properties.setProperty("kaptcha.border", "yes");
        properties.setProperty("kaptcha.border.color", "105,179,90");
        properties.setProperty("kaptcha.textproducer.font.color", "blue");
        properties.setProperty("kaptcha.image.width", "160");
        properties.setProperty("kaptcha.image.height", "60");
        properties.setProperty("kaptcha.textproducer.char.space", "3");
        properties.setProperty("kaptcha.textproducer.font.names", "Arial,Courier");
        properties.setProperty("kaptcha.noise.color", "white");

        // 区分普通/数学验证码的配置
        if (isMath) {
            // 数学验证码专属配置
            properties.setProperty("kaptcha.session.key", "kaptchaCodeMath");
            properties.setProperty("kaptcha.textproducer.font.size", "35");
            properties.setProperty("kaptcha.textproducer.char.length", "6");
            // 自定义文本生成器（需实现 KaptchaTextCreator，与 Spring 中逻辑一致）
            properties.setProperty("kaptcha.textproducer.impl", "com.tianyuan.lims.common.config.KaptchaTextCreator");
            // 无噪点
            properties.setProperty("kaptcha.noise.impl", "com.google.code.kaptcha.impl.NoNoise");
            // 阴影样式
            properties.setProperty("kaptcha.obscurificator.impl", "com.google.code.kaptcha.impl.ShadowGimpy");
        } else {
            // 普通字符验证码配置
            properties.setProperty("kaptcha.session.key", "kaptchaCode");
            properties.setProperty("kaptcha.textproducer.font.size", "30");
            properties.setProperty("kaptcha.textproducer.char.length", "5");
        }

        // 应用配置
        kaptcha.setConfig(new Config(properties));
        return kaptcha;
    }

    // 获取普通验证码实例
    public static DefaultKaptcha getCaptchaProducer() {
        return captchaProducer;
    }

    // 获取数学验证码实例
    public static DefaultKaptcha getCaptchaProducerMath() {
        return captchaProducerMath;
    }
}
